#include <stdio.h>

int main(int argc, char **argv)
{
    // egister说明符向编译器表示，该变量是经常使用的，应该提供最快的读取速度，所以应该放进寄存器。但是，编译器可以忽略这个说明符，不一定按照这个指示行事。
    register int a = 100;
    // int *p = &a; // 编译器报错

    register int arr[] = {11, 22, 33, 44, 55};

    // int *p = arr;        // 报错
    // int a2 = *(arr + 2); // 报错

    // 历史上，CPU 内部的缓存，称为寄存器（register）。与内存相比，寄存器的访问速度快得多，所以使用它们可以提高速度。但是它们不在内存之中，所以没有内存地址，这就是为什么不能获取指向它们的指针地址。现代编译器已经有巨大的进步，会尽可能优化代码，按照自己的规则决定怎么利用好寄存器，取得最佳的执行速度，所以可能会忽视代码里面的register说明符，不保证一定会把这些变量放到寄存器。
    return 0;
}